#include "cpu.h"

void CCpu::ALU(int r0_value, int r1_value)
{
    /**获取输入数据保存至寄存器R0/R1中**/
    R0 = r0_value;
    R1 = r1_value;
}

Register CCpu::add()
{
    R2 = R0 + R1;

    return R2;
}

Register CCpu::sub()
{
    R2 = R0 - R1;
    return R2;
}

Register CCpu::mul()
{
    if(R0==0 || R1==0)
    {
        /***优化算法，乘0直接返回0*****/
        R2 = 0;
    }
    else if(R1==2)
    {
      /**优化算法，*2的整倍数直接移位**/
        R2 =  R0<<1;
    }
    else if(R0==2)
    {
      /**优化算法，*2直接移位**/
        R2 = R1<<1;
    }
    else
    {
        R2 = R0 * R1;
    }
    return R2;
}

Register CCpu::div()
{
    if(R1==0)//避免➗零问题
    {
        R2 =0;
    }
    else if(R1==2)
    {
      /**优化算法，➗2直接移位**/
        R2 = R0>>1;

    }
    else
    {
        R2 = R0 / R1;
    }
    return R2;
}
